package ar.unsam.tp.test

import ar.unsam.tp.excepciones.JugadorNoJuegaException
import ar.unsam.tp.programa.Calificacion
import ar.unsam.tp.programa.Jugador
import ar.unsam.tp.programa.Partido
import ar.unsam.tp.tipo.Estandar
import junit.framework.Assert
import org.junit.Before
import org.junit.Test

class TestCalificar {
	var Partido partido = new Partido()
	var Jugador osvaldo = new Jugador("osvaldo")
	var Jugador pepe = new Jugador("pepe")
	var Calificacion calificacionParaOsvaldo

	@Before
	def void init() {
		osvaldo.setTipoDeInscripcion(new Estandar)
		pepe.setTipoDeInscripcion(new Estandar)
		partido.alta(pepe)
		partido.alta(osvaldo)
		calificacionParaOsvaldo = pepe.crearCalificacion(0, "osvaldo gallina pechofrio")
	}

	@Test
	def void testCalificarJugadorAnotado() {
		partido.admin.agregarCalificacion(osvaldo, calificacionParaOsvaldo)
		Assert::assertTrue(partido.admin.jugadoresCalificados.get(calificacionParaOsvaldo) != null)
	}

	@Test
	def void testCalificarJugadorNoAnotado() {
		partido.baja(osvaldo)
		partido.admin.agregarCalificacion(osvaldo, calificacionParaOsvaldo)
		Assert::assertTrue(partido.admin.jugadoresCalificados.get(calificacionParaOsvaldo) != null)
	}

	@Test
	def void testAceptarCalificacion() {
		partido.admin.agregarCalificacion(osvaldo, calificacionParaOsvaldo)
		partido.admin.aceptarCalificacion(calificacionParaOsvaldo)
		Assert::assertTrue(osvaldo.calificaciones.contains(calificacionParaOsvaldo))
	}

	@Test
	def void testRechazarCalificacion() {
		partido.admin.agregarCalificacion(osvaldo, calificacionParaOsvaldo)
		partido.admin.rechazarCalificacion(calificacionParaOsvaldo)
		
		Assert::assertTrue(
			calificacionParaOsvaldo.jugadorCalificador.calificacionesRechazadas.contains(calificacionParaOsvaldo))
	}

}
